什么是持续集成
概述
持续集成(Continuous Integration,简称
CI
)指的是,频繁地(一天多次)将代码集成到主干。 GitLab CI是 GitLab 提供的持续集成服务,只要在你的仓库根目录 创建一个
.gitlab-ci.yml
文件, 并为该项目指派一个Runner,当有合并请求或者 push的时候就会触发build。
.gitlab-ci.yml
文件定义GitLab runner要做哪些操作。 默认有3个[stages(阶段)]: build、test、deploy。优点
- 可以快速发现错误,定位错误也比较容易
- 防止分支大幅偏离主干。代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成
- 持续交付、持续部署
- 持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
- 持续部署(Continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
持续集成系统的组成
- 一个自动构建过程,包括自动编译、分发、部署和测试等。
- 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。
- 一个持续集成服务器。
搭建持续集成环境
登录 GitLab 新建一个空的工程(如
gitlab-ci-test
)左侧工具栏依次选择: 设置 -> CI/CD 进行手动设置指定运行器
配置专用 Runner
安装 GitLab Runner
各平台安装教程可至官网教程查看, 这里仅对
Linux
平台进行介绍。在Linux平台上搭建有两种方式
虚拟机。如macOS上的Parallels Desktop
第一步,下载
1
264位机器
sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64第二步,加执行权限
1
sudo chmod +x /usr/local/bin/gitlab-runner
第三步,下载docker (可选,可不执行)
1
curl -sSL https://get.docker.com/ | sh
第四步,创建一个 gitlab-ci 用户
1
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
第五步,启动runner
1
2
3
4
5install
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
run
sudo gitlab-runner start
注册 Runner (绑定持续集成工程)
1
sudo gitlab-runner register
将会依次提示
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
输入gitlab-ci的坐标地址:
Please enter the gitlab-ci token for this runner
输入你的注册令牌:
Please enter the gitlab-ci description for this runner
为你的Runner设置描述信息, 看个人喜好, 这里设置
my-first-runner
Please enter the gitlab-ci tags for this runner (comma separated):
为你的Runner设置标签信息, 之后
.gitlab-ci.yml
可配置不同的tag来跑不同的Runner, 这里设置Local-Ubuntu-16-04
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker parallels, virtualbox, docker-ssh, shell:
为你的Runner设置执行器, 这里设置
shell
测试完毕后刷新我们的gitlab工程, 可以看到注册后的Runner
发现这边有个感叹号, 这是由于我们的测试工程未进行标记, 可以进入箭头指向的设置按钮
勾选允许运行未标记的作业, 保存修改。
编写最简单的测试工程
工程目录
1
2
3
4
5
6
7
8├── gitlab-ci-test
├── .gitlab-ci.yml
├── build.sh
├── clean.sh
├── CMakeLists.txt
├── main.cpp
├── README.md
└── run.shmain.cpp简单打印
HelloWorld!
配置
.gitlab-ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43before_script:
- echo "Start gitlab-ci deploy"
after_script:
- echo "End gitlab-ci deploy"
stages:
- build
- test
- deploy
build:
stage: build
tags:
- Local-Ubuntu-16-04
script:
- echo "Now, do build"
- sh build.sh
only:
- develop
- master
test:
stage: test
tags:
- Local-Ubuntu-16-04
script:
- echo "Now, do test"
- sh build.sh
- sh run.sh
only:
- develop
- master
deploy:
stage: deploy
tags:
- Local-Ubuntu-16-04
script:
- echo "Now, do deploy"
- sh clean.sh
only:
- develop
- master推送到远程仓库
查看持续集成结果
其他参考
内置的环境变量
1 | export CI_JOB_ID="50" |